import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        
        //通配符
        String p = in.next().toLowerCase();
        String t = in.next().toLowerCase();
        System.out.println(isMatch(t,p));      
    }
    private static boolean isMatch(String t,String p){
        if(0 == t.length() && 0 == p.length()) {
            return true;
        }
        if(0 != t.length() && 0 == p.length()) {
            return false;
        }
        boolean[][] dp = new boolean[t.length()+1][p.length()+1];
        dp[0][0] = true;
        //初始化,把t为0时,p的值全部初始化
        for(int i = 1;i<p.length()+1;i++) {
            //如果前一个为真,并且此时前i个p对应的位置为*,那么匹配谁都为真,所以前i个通配符匹配谁都为真
            if(dp[0][i-1] && p.charAt(i-1) == '*') {
                dp[0][i] = true;
            }else {
                break;
            }
        }
        //第0行已经填充完了
        for(int i = 1;i<t.length()+1;i++) {
            for(int j = 1;j<p.length()+1;j++) {
                // 前nm个是否为真
                if(t.charAt(i-1) == p.charAt(j-1)) {
                    dp[i][j] = dp[i-1][j-1]; 
                }else if(p.charAt(j-1) == '?') {
                    dp[i][j] = dp[i-1][j-1]&&(t.charAt(i-1)>='a'&&t.charAt(i-1)<='z');
                }else if(p.charAt(j-1) == '*') {
                    dp[i][j] = dp[i][j-1] || dp[i-1][j];
                }else {
                    dp[i][j] = false;
                }
            }
        }
        return dp[t.length()][p.length()];
        
    }
}